package com.vhall.component.controller.rbac.facade;

import com.vhall.component.entity.rbac.vo.*;
import io.swagger.annotations.ApiOperation;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;

import java.util.List;

/**
 * 组操作
 *
 * @author longzhen.gong
 * @date 2021/6/10 19:19
 */
@FeignClient(name = "RbacGroupFacade", path = "/v4/rbac/group/")
public interface RbacGroupFacade {

    /**
     * 创建组
     *
     * @param reqVO 参数
     * @return 返回值
     */
    @ApiOperation("创建组")
    @PostMapping(value = "create")
    GroupVO create(@Validated GroupCreateReqVO reqVO);

    /**
     * 修改组
     *
     * @param reqVO 参数
     * @return 返回值
     */
    @ApiOperation("修改组")
    @PostMapping(value = "update")
    Boolean update(@Validated GroupUpdateReqVO reqVO);

    /**
     * 删除组
     *
     * @param reqVO 参数
     * @return 返回值
     */
    @ApiOperation("删除组")
    @PostMapping(value = "delete")
    Boolean delete(@Validated GroupDeleteReqVO reqVO);

    /**
     * 通过应用id获取组列表
     *
     * @param reqVO 参数
     * @return 返回值
     */
    @ApiOperation("通过应用id获取组列表")
    @GetMapping(value = "get-list-by-app")
    List<GroupVO> getListByApp(@Validated GroupListReqVO reqVO);

    /**
     * 增加组权限
     *
     * @param reqVO 参数
     * @return 返回值
     */
    @ApiOperation("增加组权限")
    @PostMapping(value = "add-access")
    boolean addAccess(@Validated GroupAddAccessReqVO reqVO);

    /**
     * 删除组权限
     *
     * @param reqVO 参数
     * @return 返回值
     */
    @ApiOperation("删除组权限")
    @PostMapping(value = "delete-access")
    boolean deleteAccess(@Validated GroupDeleteAccessReqVO reqVO);

    /**
     * 增加用户到指定组
     *
     * @param reqVO 参数
     * @return 返回值
     */
    @ApiOperation("增加用户到指定组")
    @PostMapping(value = "add-user")
    boolean addUser(@Validated GroupAddUserReqVO reqVO);

    /**
     * 删除组用户
     *
     * @param reqVO 参数
     * @return 返回值
     */
    @ApiOperation("删除组用户")
    @PostMapping(value = "delete-user")
    boolean deleteUser(@Validated GroupDeleteUserReqVO reqVO);

    /**
     * 获取组权限
     *
     * @param reqVO 参数
     * @return 返回值
     */
    @ApiOperation("获取组权限")
    @GetMapping(value = "info")
    List<GroupInfoRspVO> info(@Validated GroupInfoReqVO reqVO);

}
